home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 3 / Info_Mac_1994-01.iso / Development / Source / MultiSession 1.04 Source / Core 27⁄June⁄1993 / CScrap.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-02  |  3.4 KB  |  175 lines  |  [TEXT/KAHL]

  1. /* CScrap.c */
  2.  
  3. #define COMPILING_CSCRAP_C
  4. #include "CScrap.h"
  5. #include "Memory.h"
  6.  
  7.  
  8. CScrap*        Scrap;
  9.  
  10.  
  11. /* initialize the scrap */
  12. /* */        CScrap::CScrap()
  13.     {
  14.         APRINT(("+CScrap::CScrap"));
  15.         ScrapType = 0;
  16.         ScrapData = NIL;
  17.         ScrapChanged = False;
  18.         BackupScrapType = 0;
  19.         BackupScrapData = NIL;
  20.         BackupScrapChanged = False;
  21.         APRINT(("-CScrap::CScrap"));
  22.     }
  23.  
  24.  
  25. /* initialize by importing the desk scrap */
  26. void        CScrap::IScrap()
  27.     {
  28.         APRINT(("+CScrap::IScrap"));
  29.         ImportScrap();
  30.         APRINT(("-CScrap::IScrap"));
  31.     }
  32.  
  33.  
  34. /* */        CScrap::~CScrap()
  35.     {
  36.         APRINT(("+CScrap::~CScrap"));
  37.         if (ScrapData != NIL)
  38.             {
  39.                 ReleaseHandle(ScrapData);
  40.             }
  41.         if (BackupScrapData != NIL)
  42.             {
  43.                 ReleaseHandle(BackupScrapData);
  44.             }
  45.         APRINT(("-CScrap::~CScrap"));
  46.     }
  47.  
  48.  
  49. /* move scrap to global clipboard */
  50. void        CScrap::ExportScrap(void)
  51.     {
  52.         APRINT(("+CScrap::ExportScrap"));
  53.         ZeroScrap();
  54.         if (ScrapData != NIL)
  55.             {
  56.                 MoveHHi(ScrapData);
  57.                 HLock(ScrapData);
  58.                 PutScrap(HandleSize(ScrapData),ScrapType,*ScrapData);
  59.                 HUnlock(ScrapData);
  60.             }
  61.         ScrapChanged = False;
  62.         APRINT(("-CScrap::ExportScrap"));
  63.     }
  64.  
  65.  
  66. /* move global clipboard to private scrap */
  67. void        CScrap::ImportScrap(void)
  68.     {
  69.         long        Offset;
  70.  
  71.         APRINT(("+CScrap::ImportScrap"));
  72.         if (ScrapData != NIL)
  73.             {
  74.                 ReleaseHandle(ScrapData);
  75.             }
  76.         if (BackupScrapData != NIL)
  77.             {
  78.                 ReleaseHandle(BackupScrapData);
  79.                 BackupScrapData = NIL;
  80.             }
  81.         ScrapData = AllocHandle(0);
  82.         SetTag(ScrapData,"ScrapData");
  83.         GetScrap(ScrapData,'TEXT',&Offset);
  84.         ScrapType = 'TEXT';
  85.         BackupScrapType = 0;
  86.         ScrapChanged = False;
  87.         BackupScrapChanged = False;
  88.         APRINT(("-CScrap::ImportScrap"));
  89.     }
  90.  
  91.  
  92. /* return a copy of the private scrap data */
  93. Handle    CScrap::GetScrapData(void)
  94.     {
  95.         Handle        Temp;
  96.  
  97.         APRINT(("+CScrap::GetScrapData"));
  98.         Temp = AllocHandleCanFail(HandleSize(ScrapData));
  99.         if (Temp == NIL)
  100.             {
  101.                 Temp = AllocHandle(0);
  102.                 SetTag(Temp,"ScrapCopy");
  103.                 APRINT(("-CScrap::GetScrapData"));
  104.                 return Temp;  /* failed, so return an empty handle */
  105.             }
  106.          else
  107.             {
  108.                 SetTag(Temp,"ScrapCopy");
  109.                 MemCpy(*Temp,*ScrapData,HandleSize(ScrapData));
  110.                 APRINT(("-CScrap::GetScrapData"));
  111.                 return Temp;
  112.             }
  113.     }
  114.  
  115.  
  116. /* return the private scrap type */
  117. OSType    CScrap::GetScrapType(void)
  118.     {
  119.         APRINT(("+CScrap::GetScrapType"));
  120.         return ScrapType;
  121.         APRINT(("-CScrap::GetScrapType"));
  122.     }
  123.  
  124.  
  125. /* delete the old scrap and create a new one */
  126. void        CScrap::SetScrap(Handle Scrap, OSType Type)
  127.     {
  128.         APRINT(("+CScrap::SetScrap"));
  129.         if (BackupScrapData != NIL)
  130.             {
  131.                 ReleaseHandle(BackupScrapData);
  132.             }
  133.         BackupScrapData = ScrapData;
  134.         BackupScrapType = ScrapType;
  135.         BackupScrapChanged = ScrapChanged;
  136.         ScrapData = Scrap;
  137.         ScrapType = Type;
  138.         ScrapChanged = True;
  139.         APRINT(("-CScrap::SetScrap"));
  140.     }
  141.  
  142.  
  143. /* swap the scrap and backup scrap */
  144. void        CScrap::UndoScrapOp(void)
  145.     {
  146.         OSType        TempType;
  147.         Handle        TempData;
  148.         MyBoolean    TempChanged;
  149.  
  150.         APRINT(("+CScrap::UndoScrapOp"));
  151.         TempType = BackupScrapType;
  152.         TempData = BackupScrapData;
  153.         TempChanged = BackupScrapChanged;
  154.         BackupScrapType = ScrapType;
  155.         BackupScrapData = ScrapData;
  156.         BackupScrapChanged = ScrapChanged;
  157.         ScrapType = TempType;
  158.         ScrapData = TempData;
  159.         ScrapChanged = TempChanged;
  160.         APRINT(("-CScrap::UndoScrapOp"));
  161.     }
  162.  
  163.  
  164. /* export scrap if it was changed, and then delete myself */
  165. void        CScrap::CommitSuicide(void)
  166.     {
  167.         APRINT(("+CScrap::CommitSuicide"));
  168.         if (ScrapChanged)
  169.             {
  170.                 ExportScrap();
  171.             }
  172.         delete this;
  173.         APRINT(("-CScrap::CommitSuicide"));
  174.     }
  175.